맨위로가기

WHERE (SQL)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

WHERE는 SQL에서 특정 조건을 만족하는 데이터를 필터링하는 데 사용되는 예약어이다. WHERE 절은 SQL DML 구문의 일부로, 조건에 따라 데이터를 선택, 수정, 삭제하는 데 활용된다. WHERE 절에서는 비교 연산자, 논리 연산자, IN, BETWEEN, LIKE, IS NULL 등의 연산자를 사용하여 조건을 설정할 수 있으며, 괄호를 사용하여 조건의 우선순위를 지정할 수 있다. LIKE 연산자는 와일드카드를 사용하여 패턴 매칭을 수행하며, SIMILAR TO 연산자는 정규 표현식을 사용한다. LIKE 연산자는 인덱스를 사용하지 않아 대량의 데이터 검색 시 성능 저하를 유발할 수 있으므로, 다른 연산자나 전문 검색을 고려하는 것이 좋다.

더 읽어볼만한 페이지

  • SQL 키워드 - TRUNCATE (SQL)
    TRUNCATE는 SQL에서 테이블 내의 모든 데이터를 빠르게 삭제하는 명령어로, 외래 키 제약 조건 무시, 테이블 잠금 방식, 트랜잭션 처리 방식 등 DELETE 명령어와 차이를 보이며, WHERE 절을 사용할 수 없어 테이블의 모든 행을 삭제하고, 일부 데이터베이스 시스템에서는 롤백이 불가능할 수 있다.
  • SQL 키워드 - Null (SQL)
    Null은 SQL에서 데이터베이스 테이블 열의 값 부재를 나타내는 특별한 표식으로, 0이나 빈 문자열과 구별되며 삼진 논리와 관련된 특별한 처리 방식으로 인해 데이터베이스 설계 및 쿼리 작성 시 주의가 필요하고 SQL 표준 구현에 대한 논쟁이 존재한다.
WHERE (SQL)

2. 문법

WHERE 절은 SQL 데이터 조작 언어(DML) 구문에서 특정 조건을 만족하는 행(row)을 선택하는 데 사용된다. 일반적인 형태는 다음과 같다.[6]

```sql

SQL-DML-Statement

FROM table_name

WHERE predicate

```


  • `SQL-DML-Statement`: SELECT, UPDATE, DELETE 등 데이터를 조회, 수정, 삭제하는 SQL 문을 의미한다.
  • `table_name`: SQL 문이 실행될 대상 테이블의 이름이다.
  • `predicate`: 데이터를 선택하기 위한 조건식을 나타낸다. 이 조건식은 참(True), 거짓(False), 또는 알 수 없음(NULL)으로 평가될 수 있다.


WHERE 절의 조건식이 참으로 평가되는 행에 대해서만 SQL 문이 실행된다. 조건식이 거짓 또는 알 수 없음으로 평가되는 행은 SQL 문의 영향을 받지 않는다.

예시:

```sql

SELECT *

FROM mytable

WHERE mycol > 100

```

위 예시는 `mytable`에서 `mycol` 컬럼의 값이 100보다 큰 행만 선택하여 반환한다.

```sql

DELETE

FROM mytable

WHERE mycol IS NULL OR mycol = 100

```

위 예시는 `mytable`에서 `mycol` 컬럼의 값이 NULL이거나 100인 행을 삭제한다.

3. 조건문

WHERE 절에서는 다양한 연산자와 키워드를 사용하여 조건을 표현할 수 있다. 단순 조건문은 `=`, `<>`, `>`, `>=`, `<`, `<=`, `IN`, `BETWEEN`, `LIKE`, `IS NULL` 또는 `IS NOT NULL` 연산자를 사용한다.[1][2]

조건식은 필요에 따라 괄호로 묶을 수 있다. 또한, 여러 개의 조건문을 `AND` 또는 `OR`로 연결할 수 있다. 괄호를 사용하면 연산 우선순위를 명시할 수 있으며, 괄호가 없으면 `AND` 연산자가 `OR` 연산자보다 우선한다.[3]

3. 1. 비교 연산자

`=`, `<>`, `>`, `>=`, `<`, `<=` 등의 비교 연산자를 사용하여 값을 비교하는 조건을 만들 수 있다.[1] 이러한 단순 조건은 `IN`, `BETWEEN`, `LIKE`, `IS NULL` 또는 `IS NOT NULL` 연산자를 사용할 수도 있다.[2]

조건식은 필요에 따라 괄호로 묶을 수 있다. 또한, 여러 개의 조건문을 `AND` 또는 `OR`로 연결할 수 있는데, 괄호가 없는 경우 `AND` 연산자가 `OR` 연산자보다 우선되므로 괄호를 사용하여 우선순위를 명시할 수 있다.[3]

다음은 ''mytable'' 테이블에서 ''mycol'' 값이 100보다 크고, '''그리고''' ''item'' 값이 문자열 리터럴 'Hammer'와 같은 행을 삭제하는 예시이다.[4]

```sql

DELETE

FROM mytable

WHERE mycol > 100 AND item = 'Hammer'

3. 2. 논리 연산자

`AND`와 `OR` 키워드를 사용하여 두 개의 조건을 결합하여 새로운 조건으로 만들 수 있다. 여러 조건을 조합할 때 괄호를 사용하여 평가 순서를 지정할 수 있다. 괄호가 없으면 `AND` 연산자가 `OR` 연산자보다 우선순위가 높다.[1]

다음은 `mycol` 컬럼 값이 100 이상이고, `item` 컬럼 값이 'Hammer'라는 문자열 리터럴과 일치하는 행을 `mytable`에서 삭제하는 예시이다.[2]

```sql

DELETE

FROM mytable

WHERE mycol > 100 AND item = 'Hammer'

3. 3. IN

`IN`은 후보 셋 내에 있는 어떤 값을 찾는다.[1]

```sql

SELECT ename WHERE ename IN ('value1', 'value2', ...)

```

`IN`은 후보 집합에 존재하는 모든 값을 찾는다. 모든 행은 해당 값이 후보 값 집합 중 하나인 경우 술어를 충족한다. 이는 다음과 동일한 동작을 한다.[1]

```sql

SELECT ename WHERE ename='value1' OR ename='value2'

```

위 SQL문은 여러 열의 비교를 허용할 수 있으며, 각 `IN` 절은 그렇지 않다. 후보가 더 많은 경우 `IN`이 덜 장황하다.[1]

`IN`은 바로 뒤에 기술된 데이터 그룹 내에 일치하는 값이 있는지 여부를 판단한다.[2]

```sql

SELECT ename WHERE ename IN ('값1', '값2', ...)

```

이 문장의 경우, ''ename''이 괄호 안의 값 중 하나와 일치하면 참이 된다. 예를 들어 값이 2개인 경우, 다음 문장과 동일하다.[2]

```sql

SELECT ename WHERE ename='값1' OR ename='값2'

```

후자의 방식에서는 여러 열을 판정에 포함시킬 수 있지만, IN에서는 단일 항목만 대상이 된다. 반면, 후보의 건수가 많은 경우에는 IN을 사용하는 것이 더 간결하게 작성할 수 있다.[2]

3. 4. BETWEEN

`BETWEEN` 연산자는 값의 범위를 지정하는 조건이다.[1]

예시:

```sql

SELECT ename WHERE ename BETWEEN 'value1' AND 'value2'

```

위 예시는 `ename` 컬럼의 값이 'value1'과 'value2' 사이 (경계값 포함)에 있는 행을 선택한다.[1]

```sql

SELECT salary from emp WHERE salary BETWEEN 5000 AND 10000

```

위 예시는 `salary` 컬럼의 값이 5000과 10000 사이 (경계값 포함)에 있는 행을 선택한다.[1]

다음 예는 수입이 50만 이상 100만 이하인 데이터를 추출한다.[1]

```sql

SELECT 収入 from emp WHERE 収入 BETWEEN 500000 AND 1000000

3. 5. LIKE

`LIKE`는 특정 조건에 맞는 문자열을 찾는 연산자이다.[2]

  • 와일드카드를 사용한 패턴:
  • `'S%'`: 'S'로 시작하는 모든 문자열을 찾는다.
  • `'%S'`: 'S'로 끝나는 모든 문자열을 찾는다.
  • `'%S%'`: 문자열 내 어디든 'S'가 포함된 모든 문자열을 찾는다.
  • `'%A_E%'`: 'A' 다음에 임의의 한 문자가 오고, 그 뒤에 'E'가 오는 모든 문자열을 찾는다.
  • `'[a-zA-Z0-9_]%'`: 문자, 숫자, 또는 '_' 기호로 시작하는 모든 문자열을 찾는다.[5]


`LIKE` 연산자는 일반적으로 인덱스를 사용하지 않고 검색을 수행하므로, 성능상의 주의가 필요하다. `=`나 `<>`와 같은 다른 연산자를 사용하면 성능을 향상시킬 수 있다. 데이터베이스 제품이나 구성에 따라 대소문자 구분(예: 'S'와 's') 여부가 다를 수 있다.

3. 6. SIMILAR TO

PostgreSQL에서 `SIMILAR TO` 연산자는 정규 표현식을 사용하여 패턴 매칭을 수행한다.[3]

```sql

string [NOT] SIMILAR TO pattern [ESCAPE escape-character]

```

`SIMILAR TO`는 `LIKE` 구문과 유사하게 작동한다.

3. 7. IS NULL / IS NOT NULL

`IS NULL` 연산자는 값이 NULL인지 확인하는 조건이다. `IS NOT NULL` 연산자는 값이 NULL이 아닌지 확인하는 조건이다.[1]

4. 성능 관련 주의 사항

`LIKE` 술어는 일반적으로 인덱스를 사용하지 않고 검색을 수행하므로 성능상의 이점이 없습니다.[2] 대신 '=', '<>' 등을 사용하면 성능이 향상됩니다. 대소문자 구분(예: 'S'와 's')은 데이터베이스 제품 또는 구성에 따라 다를 수 있습니다.

SQL을 사용할 경우, `LIKE` 연산자는 인덱스를 사용하지 않아 성능이 저하될 수 있다는 점을 알아야 합니다. 가능하다면 '='나 '<>' 등의 연산자를 사용하는 것이 성능에 더 좋습니다. 또한, 데이터베이스 소프트웨어에 따라 문자의 처리 방식(대문자와 소문자 등)이 다를 수 있으므로 주의해야 합니다.

참조

[1] 웹사이트 SQL WHERE Clause – Things beginners must know http://www.programmi[...]
[2] 웹사이트 Microsoft Technet https://technet.micr[...] 2013-11-21
[3] 웹사이트 9.7. Pattern Matching https://www.postgres[...] 2023-06-10
[4] 웹사이트 SQL WHERE Clause – Things beginners must know http://www.programmi[...] 2017-10-09
[5] 웹사이트 Microsoft Technet https://technet.micr[...] 2013-11-21
[6] 웹인용 SQL Where video tutorial http://www.sqlserver[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com